package com.ebelter.btlibrary.common;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.NumberFormat;

/**
 * 数字格式化工具
 * Created by pan on 2017/7/6.
 */
public class NumberFormatter {


    /**
     * 每隔三位逗号隔开,并取2位小数
     */
    public static String formatComma(double value) {
        return new DecimalFormat(",###.00").format(value);
    }

    /**
     * 取整，四舍五入
     */
    public static String formatInt(double value) {
        return new DecimalFormat("#").format(value);
    }

    /**
     * 科学计数法，并取4位小数
     */
    public static String formatScience(double value) {
        return new DecimalFormat("#.####E0").format(value);
    }

    /**
     * 精确保留小数
     */
    public static float format(int newScale, double value) {
        return new BigDecimal(value).setScale(newScale, BigDecimal.ROUND_HALF_UP).floatValue();
    }


    /**
     * 本地化精确保留小数，只适合显示时用
     * 默认保留2位小数
     */
    public static String formatLocle(int newScale, double value) {
        String format = "0.00";
        switch (newScale) {
            case 0:
                format = "0";
                break;
            case 1:
                format = "0.0";
                break;
            case 2:
                format = "0.00";
                break;
            case 3:
                format = "0.000";
                break;
            case 4:
                format = "0.0000";
                break;
        }
        return new DecimalFormat(format).format(value);
    }

    /**
     * %百分号显示，本地化精确保留小数
     */
    public static String formatPercentLocle(int newScale, double value) {
        NumberFormat nt = NumberFormat.getPercentInstance();
        nt.setMinimumFractionDigits(newScale);
        nt.setRoundingMode(RoundingMode.HALF_UP);
        return nt.format((value + 1 / 1000000f) / 100.0f);
    }

}
